//
// Created by wujehy on 2020/6/22.
//

#ifndef LEARNING_CPP_DATABASEIMPL_H
#define LEARNING_CPP_DATABASEIMPL_H

#include <string>

/**
 * @brief DataBaseImpl 这个 类 作为 一个统一的抽象类
 * 描述 我们需要定义的动作  , 然后 子类进行 继承重写实现具体的功能 实现需要的功能
 * 使用抽象类 描述 , 在切换的时候 就可以 无缝切换 , 适配不同的情况
 *
 * 这里以数据库例子为例 : 假设作者默认实现了 Sqlite 的 接口 ,
 * 如果右其他人使用这套代码 ,但是想使用mysql 作为存储 ,
 * 那么 对方只要继承 DataBaseImpl 接口 重新实现一套使用 mysql 的 方法 ,
 * 在实现的地方 替换 即可 将动作切换过去
 */
class DataBaseImpl{
public:
    virtual int initDataBase() = 0;
    virtual int Insert(std::string key , std::string value) = 0 ;
    virtual int Select(std::string key , std::string &output_value ) = 0 ;
    virtual int Delete(std::string key ) = 0 ;
};
#endif //LEARNING_CPP_DATABASEIMPL_H
